#ifndef _BSP_CAN_H_
#define _BSP_CAN_H_
#include "gd32f30x.h"
/* select CAN baudrate */
/* 1MBps */
//#define CAN_BAUDRATE 1000
/* 500kBps */
 #define CAN_BAUDRATE  500 
/* 250kBps */
/* #define CAN_BAUDRATE  250 */
/* 125kBps */
/* #define CAN_BAUDRATE  125 */
/* 100kBps */
/* #define CAN_BAUDRATE  100 */
/* 50kBps */
/* #define CAN_BAUDRATE  50 */
/* 20kBps */
/* #define CAN_BAUDRATE  20 */

/**
 * @brief 定义BSP_CAN0结构体实例，用于配置CAN0控制器的初始化参数
 * 
 * 该结构体包含了CAN0控制器的所有必要配置信息，包括端口、时钟、引脚映射等。
 */
typedef struct __typdef_can_general
{
    uint32_t can_port;                      //CAN控制器端口
    rcu_periph_enum rcu_can;                //  CAN控制器时钟控制寄存器
    rcu_periph_enum rcu_IO_port;            // IO端口时钟控制寄存器
    uint32_t IO_port;                       // IO端口
    uint32_t pin_tx;                        // CAN发送引脚
    uint32_t pin_rx;                        // CAN接收引脚
    uint32_t gpio_speed;                    // GPIO速度设置
	uint32_t can_remap;						//重映射
    can_parameter_struct can_parameter;     // CAN初始化参数结构体
    can_filter_parameter_struct can_filter; // CAN过滤器结构体
    FlagStatus can_rx_use_interrupt;        // 是否使用接收中断
} typdef_can_general;

void driver_can_config(typdef_can_general can_general);
void driver_can_transmit(typdef_can_general can_general, can_trasnmit_message_struct *transmit_message);
#endif // !_BSP_CAN_H_
